% =============================================================================%
% ================================== Mathe ====================================%
% =============================================================================%

\RequirePackage[utopia]{mathdesign}                                       %Fonts

% ------------------------------ Abkuerzungen -------------------------------- %
\newcommand{\Nz}{\ensuremath{\mathbb{N}}}     % natuerliche Zahlen
\newcommand{\Rz}{\ensuremath{\mathbb{R}}}     % reelle Zahlen
\newcommand{\Zz}{\ensuremath{\mathbb{Z}}}     % ganze Zahlen
\newcommand{\Qz}{\ensuremath{\mathbb{Q}}}     % rationale Zahlen

% ----------------------------- shadetheorems -------------------------------- %
\newshadetheorem{definitions}{defs}[section]

\newshadetheorem{Kor}[definitions]{Korollar}
\newenvironment{Korollar}[1][]{%
  \definecolor{shadethmcolor}{rgb}{.92,.93,.91}
  \definecolor{shaderulecolor}{rgb}{0.0,0.0,0.4}
  \begin{Kor}[#1]\ \medskip \\%\hspace*{1mm}%
}{\end{Kor}}

\newshadetheorem{Def}[definitions]{Definition}
\newenvironment{Definition}[1][]{%
%  \definecolor{shadethmcolor}{rgb}{.85,.88,.87}
  \definecolor{shadethmcolor}{RGB}{227,236,240}
  \definecolor{shaderulecolor}{rgb}{.5,.5,.5}
  \setlength{\shadeboxrule}{1pt}%
  \begin{Def}[#1]\ \medskip \\%\hspace*{1mm}%
}{\end{Def}}

\newshadetheorem{sat}[definitions]{Satz}
\newenvironment{Satz}[1][]{%
%  \definecolor{shadethmcolor}{rgb}{.92,.93,.91}
  \definecolor{shadethmcolor}{RGB}{241,244,232}
  \definecolor{shaderulecolor}{rgb}{0.0,0.0,0.4}
  \begin{sat}[#1]\ \medskip \\ %\hspace*{1mm}%
}{\end{sat}}

\newshadetheorem{Lem}[definitions]{Lemma}
\newenvironment{Lemma}[1][]{%
%  \definecolor{shadethmcolor}{rgb}{.92,.93,.91}
  \definecolor{shadethmcolor}{RGB}{244,242,232}
  \definecolor{shaderulecolor}{rgb}{0.0,0.0,0.4}
  \begin{Lem}[#1]\ \medskip \\%\hspace*{1mm}%
}{\end{Lem}}

\newshadetheorem{Not}[definitions]{Notation}
\newenvironment{Notation}[1][]{%
  \definecolor{shadethmcolor}{rgb}{.92,.93,.91}
  \definecolor{shaderulecolor}{rgb}{0.0,0.0,0.4}
  \begin{Not}[#1]\ \medskip \\%\hspace*{1mm}%
}{\end{Not}}

\newshadetheorem{Alg}[definitions]{Algorithmus}
\newenvironment{Algorithmus}[1][]{%
  \definecolor{shadethmcolor}{rgb}{.92,.93,.91}
  \definecolor{shaderulecolor}{rgb}{0.0,0.0,0.4}
  \begin{Alg}[#1]\ \medskip \\%\hspace*{1mm}%
}{\end{Alg}}

\newshadetheorem{Bsp}[definitions]{Beispiel}
\newenvironment{Beispiel}[1][]{%
  \definecolor{shadethmcolor}{rgb}{.92,.93,.91}
  \definecolor{shaderulecolor}{rgb}{0.0,0.0,0.4}
  \begin{Bsp}[#1]\ \medskip \\%\hspace*{1mm}%
}{\end{Bsp}}

% =================================== TIKZ ====================================%

% ----------------------------- Farben der Baeume  ----------------------------%
\xdefinecolor{gruen}{RGB}{175, 193, 36}
\xdefinecolor{dunkel gruen}{RGB}{136, 151, 28}
\xdefinecolor{dunkel blau}{RGB}{28, 46, 151}
\xdefinecolor{violett}{RGB}{191, 127, 191}
\xdefinecolor{braun}{RGB}{191, 191, 127}
\xdefinecolor{rot}{RGB}{255, 127, 127}

% ------------------------------ Variablen  -----------------------------------%
\newcommand{\gradius}{2}                                 %"radius" of the graphs 
\newcommand{\distance}{1}                  %Abstand zw. oberer und unterer Reihe
\newcommand{\gnode}{2pt}                                      %size of the nodes


% --------------------------- Vorlage fuer ein Baum  --------------------------%
% Aufruf mit:
%  \begin{Baum}[violett] %Farbe ist optional, default gruen
%    \node[level 0] (z){a} child {node {b}};
%  \end{Baum}
\newenvironment{Baum}[1][gruen]
  {\begin{tikzpicture}[auto,draw=#1!200, ->,shorten >=1pt, auto, semithick, font=\sffamily]
   \tikzstyle{edge} = [draw,thick,-]
   \tikzstyle{every node}=[minimum size=20pt, circle, draw=#1!200, fill]
   \tikzstyle{level 0}=[fill=#1!140]%, text=white]
   \tikzstyle{level 1}=[nodes={fill=#1!100}]
   \tikzstyle{level 2}=[nodes={fill=#1!60}]
   \tikzstyle{level 3}=[nodes={fill=#1!40}]
   \tikzstyle{level 4}=[nodes={fill=#1!20}]
   \tikzstyle{level 5}=[nodes={fill=#1!15}]
   \tikzstyle{level 6}=[nodes={fill=#1!10}]
   \tikzstyle{level 7}=[nodes={fill=#1!5}]
  }
  {
   \end{tikzpicture}
  }
  
% ------------------------ Vorlage fuer einen Graphen  ------------------------%
% Aufruf mit:
%  \begin{Graph}[violett]                     %Farbe ist optional, default gruen
%    \node (1) at (0,0) {a};
%    \node (2) at (2.5,0) {b};
%    \node (3) at (1.25,2) {c};
%    \path (2) edge [bend right] (3)
%          (3) edge (1)
%          (3) edge (2)
%  	       (1) edge [loop left] (1);
%  \end{Graph}
\newenvironment{Graph}[1][gruen]
  {\begin{tikzpicture}[draw=#1!200, ->,shorten >=1pt, auto, semithick, font=\sffamily]
   \tikzstyle{every node}=[minimum size=20pt, circle, draw=#1!200, fill=#1]
  }
  { \end{tikzpicture} }
  
% ------------------ Vorlage fuer einen kompleten Graphen  --------------------%
% Aufruf mit:
% \KompleterGraph[violett]{5}
% \KompleterGraph{5}                       %Farbe wird default auf gruen gesetzt

\newcommand{\KompleterGraph}[2][gruen]{
\begin{tikzpicture}[draw=#1!200, auto, semithick, font=\sffamily]
\tikzstyle{every node}=[minimum size=20pt, circle, draw=#1!200, fill=#1]
  \newcommand\vertex[1]{(##1*360/#2:\gradius)}
    \foreach \i in {1,...,#2}		
      { \node (\i) at \vertex{\i} {\i}; }
    
    \foreach \i in {1,...,#2}		
      { \foreach \j in {\i,...,#2}
          { \path (\i) edge (\j); }
      }
\end{tikzpicture}
}

% ------------- Vorlage fuer einen kompleten bipartiten Graphen  --------------%
% Aufruf mit:
% \KompleterBipartiterGraph{4}{2}          %Farbe wird default auf gruen gesetzt
% \KompleterBipartiterGraph[violett]{4}{2}

\newcommand{\KompleterBipartiterGraph}[3][gruen] {
\begin{tikzpicture}[draw=#1!200, semithick, font=\footnotesize\sffamily]
\tikzstyle{every node}=[inner sep=1pt, minimum size=20pt, circle, draw=#1!200, fill=#1]
  %(1)Berechnung des Startpunktes (obere Reihe)
  \pgfmathparse{(((#2-1)/-2)*\gradius)-\gradius}
  %(1) als Macro definiert
  \pgfmathsetmacro\MKlw{\pgfmathresult}
  %(2)Berechnung des Startpunktes (untere Reihe)
  \pgfmathparse{(((#3-1)/-2)*\gradius)-\gradius}
  %(2) als Macro definiert
  \pgfmathsetmacro\MKrw{\pgfmathresult}

  \foreach \j in {1,...,#3}
  { \node[fill=#1!60] (#2+\j) at (\MKrw+\j*\gradius,-\distance) {(1,\j)}; }

  \foreach \i in {1,...,#2}
  { \node (\i) at (\MKlw+\i*\gradius,\distance) {(0,\i)}; 
    \foreach \j in {1,...,#3}
    { \path (\i) edge (#2+\j); }
  }
\end{tikzpicture}
}
